<?php
/**
 * @author ligang
 * @datetime 2021/02/07 9:10 下午
 * @description前端活动支付下单
 */
namespace addons\epay\controller;

use addons\epay\library\Service;
use addons\epay\library\Wechat;
use fast\Random;
use think\addons\Controller;
use Exception;
use app\admin\model\trades\assets\Order;
use think\Db;
use app\admin\model\trades\order\Gainlog;
use app\admin\model\trades\order\Gain;
use think\exception\PDOException;
use think\exception\ValidateException;
use think\Log;

/**
 * 微信支付宝插件首页
 *
 * 此控制器仅用于开发展示说明和体验，建议自行添加一个新的控制器进行处理返回和回调事件，同时删除此控制器文件
 *
 * Class Index
 * @package addons\epay\controller
 */
class Payment extends Controller
{

    protected $layout = 'default';

    protected $config = [];

    public function _initialize()
    {
        parent::_initialize();
    }

    public function index()
    {
        $this->view->assign("title", "微信支付宝整合插件");
        return $this->view->fetch();
    }



    /**
     * 支付成功，回调函数
     */
    public function notifyx()
    {
        $paytype = $this->request->param('paytype','wechat');
       // echo $paytype;die;
       // $out_trade_no = $this->request->param('out_trade_no');
        //Pay::Wechat($config);
        $pay = Service::checkNotify($paytype);
        if (!$pay) {
            $data = '签名错误';
            return;
        }
        $result = $pay->verify();


        $order = Order::where('orderid', $result['out_trade_no'])->first();
//        if (!$order || $order->state != 1)  {
//            //如果订单状态异常直接退出
//            return $pay->success();
//        }
//        if (($order->amount) != $result['total_fee'] / 100) {
//            //如果金额不匹配直接退出
//            return $pay->success();
//        }
        //进行订单状态变更等支付成功操作
        //....
     //   return $pay->success();

           // $payamount = $paytype == 'alipay' ? $data['total_amount'] : $data['total_fee'] / 100;
            //$out_trade_no = $data['out_trade_no'];
           // return $data;
            //你可以在此编写订单逻辑
        if($result['result_code'] == 'SUCCESS' &&  $result['return_code'] == 'SUCCESS'){

//            $orderid = $this->request->param('out_trade_no','');
//            if(empty($orderid)){
//                $orderid = $result['out_trade_no'];
//            }
//            $sn = $this->request->param('transaction_id');
//            if(empty($sn))
//                $sn = $resul->transaction_id;
//            $r =  Db::name("activity_order")->where('orderid',$orderid)->find();
//            if(!$r){
//                $this->error('没有此订单');
//            }
            $amount = $order->amount;
            $oid = $order->id;
            $admin_id = $order->account_id;
            $orderid = $result['out_trade_no'];
            $sn = $result['transaction_id'];
          //  Db::startTrans();
            try {
                Order::update_order($orderid,$sn);//订单表更新
             //   Gainlog::update_gain_log($oid);//收益详情表更新 $oid是自动生成的订单id
              //  Gain::update_gain($admin_id,$amount);//收益总表更新
              //  Db::commit();

            }catch (ValidateException $e) {
             //   Db::rollback();
                $this->error($e->getMessage());
            } catch (PDOException $e) {
              //  Db::rollback();
                $this->error($e->getMessage());
            } catch (Exception $e) {
               // Db::rollback();
                $this->error($e->getMessage());
            }
        }


        return $pay->success();
    }

    /**
     * 支付返回，仅供开发测试
     */
    public function returnx()
    {
        $paytype = $this->request->param('paytype','wechat');
        $out_trade_no = $this->request->param('out_trade_no');
//        $pay = Service::checkReturn($paytype);
//        if (!$pay) {
//            $this->error('签名错误', '');
//        }

        //你可以在这里通过out_trade_no去验证订单状态
        //但是不可以在此编写订单逻辑！！！
        $r =  Db::name("activity_order")->where('orderid',$out_trade_no)->find();
        if($r['state']!=2){
            $this->error('支付状态失败');
        }
        $this->success("请返回网站查看支付结果", '',$r);
    }

}
